package io.tim.mvc_f2.proxy.test;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class HelloAspect {
	
	/**
	 * execution() 表示拦截方法，括号中可定义需要匹配的规则；
	 * 第一个 * 表示方法的返回值是任意的
	 * 第二个 * 表示匹配该类的所有方法
	 * (..) 表示方法的参数是任意的
	 * 
	 * @param pjp
	 * @return
	 * @throws Throwable
	 */
	//@Around("execution(* io.tim.mvc_f2.proxy.test.HelloImpl.*(..))")
	@Around("@annotation(io.tim.mvc_f2.proxy.test.Tag)")
	public Object around(ProceedingJoinPoint pjp) throws Throwable {
		before();
		Object result = pjp.proceed();
		after();
		return result;
	}
	
	private void before() {
		System.out.println("before...");
	}
	
	private void after() {
		System.out.println("after...");
	}
}
